package model;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import helper.Helper;
import java.util.ArrayList;

public class PacienteFactory {

    private final String ARQUIVO = "pacientes.txt";
    private File file;
    private FileWriter fw;
    private BufferedWriter bw;
    private FileReader fr;
    private BufferedReader br;
    private String path;

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public boolean gravarPaciente(PacienteBean paciente) {
        file = new File(getPath() + "\\" + ARQUIVO);
        try {
            fw = new FileWriter(file, true);
            bw = new BufferedWriter(fw);
            StringBuilder conteudo = new StringBuilder();
            conteudo.append(paciente.getCodigo());
            conteudo.append(",").append(paciente.getNome());
            conteudo.append(",").append(paciente.getMotivo());
            conteudo.append(",").append(paciente.getSexo());
            conteudo.append(",").append(paciente.getTipoSangue());
            conteudo.append(",").append(Helper.calendarToString(
                    paciente.getDataNascimento(), "dd/MM/yyyy"));
            conteudo.append("\r");
            bw.write(conteudo.toString());
            bw.close();
            return true;
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return false;
        }
    }

    public ArrayList<PacienteBean> carregarArquivo() {
        file = new File(getPath() + "\\" + ARQUIVO);
        if (!file.exists()) {
            return null;
        }
        try {
            fr = new FileReader(file);
            br = new BufferedReader(fr);
            String linha = "";
            ArrayList<PacienteBean> lista = new ArrayList<PacienteBean>();
            while ((linha = br.readLine()) != null) {
                String itens[] = linha.split(",");
                PacienteBean paciente = new PacienteBean();
                paciente.setCodigo(Integer.parseInt(itens[0]));
                paciente.setNome(itens[1]);
                paciente.setMotivo(itens[2]);
                paciente.setSexo(itens[3].charAt(0));
                paciente.setTipoSangue(itens[4]);
                paciente.setDataNascimento(
                        Helper.toCalendar(itens[5], "dd/MM/yyyy"));
                lista.add(paciente);
            }
            br.close();
            return lista;
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }
    
    public PacienteBean pesquisar(int codigo) {
       ArrayList<PacienteBean> lista = carregarArquivo();
       for(PacienteBean paciente:lista){
           if(paciente.getCodigo() == codigo ) return paciente;
       }
       return null;
    }
    
    public PacienteBean pesquisarNoArquivo(int codigo){
        file = new File(getPath() + "\\" + ARQUIVO);
        if (!file.exists()) return null;
        PacienteBean paciente = null;
        try {
            fr = new FileReader(file);
            br = new BufferedReader(fr);
            String linha = "";
            while ((linha = br.readLine()) != null) {
                String itens[] = linha.split(",");
                if(new Integer(itens[0])== codigo){
                  paciente = new PacienteBean();
                  paciente.setCodigo(Integer.parseInt(itens[0]));
                  paciente.setNome(itens[1]);
                  paciente.setMotivo(itens[2]);
                  paciente.setSexo(itens[3].charAt(0));
                  paciente.setTipoSangue(itens[4]);
                  paciente.setDataNascimento(Helper.toCalendar(itens[5], "dd/MM/yyyy"));                
                  break;
                }
            }    
            br.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return paciente;
    }
    
    public boolean remover(int codigo){
        ArrayList<PacienteBean> itens = 
        carregarArquivo();
        if(itens == null || itens.isEmpty())
            return false;
        boolean achou = false;
        for(PacienteBean p:itens){
          if(p.getCodigo() == codigo){
             itens.remove(p); 
             achou = true;
             break;
          }  
        }
        if(!achou) return false;
        file = new File(getPath()+"\\"+ARQUIVO);
        if(file.exists()){
            file.delete();
        } 
        for(PacienteBean paciente:itens){
          gravarPaciente(paciente);  
        }     
        return true;
    }
    
    public boolean alterar(PacienteBean paciente){
        ArrayList<PacienteBean> itens =
        carregarArquivo();
        if(itens == null || itens.isEmpty())
          return false;
        int i;
        for(i=0; i < itens.size();i++){
          if(itens.get(i).getCodigo() == 
             paciente.getCodigo())
           break;   
        }
        if(i==itens.size()) return false;
        itens.set(i,paciente);
        file = new File(getPath()+"\\"+ARQUIVO);
        if(file.exists()) file.delete();
        for(PacienteBean p:itens){
            gravarPaciente(p);
        }
        return true;
    }
    
    
    
}
